# 将数据进行转换
import ast, pandas as pd

from django.views import View
# 导入返回响应
from SaaSDevelTool.data_return_response import create_response
# 导入错误信息装饰器
from SaaSDevelTool.data_return_response import error_message_detection
# 查询当前参数是否是int类型
from SaaSDevelTool.data_operation import is_number
# 获取数据库连接
from SaaSDevelTool.data_mysql_data import db

# 获取分页器

"""修改用户组"""


class SaaSDevelRoleResourceUpdate(View):
    @error_message_detection
    def post(self, request):
        # 获取用户组编号
        role_id = request.POST.get("role_id")
        # 获取页面编号
        resource_id_list = request.POST.get("resource_id_list")
        # 判断用户组编号类型
        if not is_number(role_id):
            return create_response(code=400, msg="权限修改失败，用户组编号传递错误。")

        # 将类型进行修改
        try:
            # 将数据转为json类型
            resource_id_list = ast.literal_eval(resource_id_list)
            # 将数据转为dataframe类型
            pd_resource_id_list = pd.DataFrame(resource_id_list)
        except Exception as err:
            return create_response(code=400, msg="权限修改失败，权限数据类型传递错误。")

        # 删除当前用户组所有的权限
        delete_map_role_resource_table_sql = """
            DELETE FROM 
                db_center_rbac.map_role_resource_table
            WHERE 
                role_id = {}
        ;""".format(role_id)
        db.update(delete_map_role_resource_table_sql)
        # 如果权限类型为空
        if pd_resource_id_list.empty:
            return create_response(code=200, msg="当前用户组权限清空成功。")
        else:
            # 拼接sql语句进行操作
            create_map_role_resource_table_front_sql = """
                INSERT INTO 
                    db_center_rbac.map_role_resource_table
                    (role_id, resource_id)
                VALUES """

            # 拼接后半部分
            create_map_role_resource_table_front_rear_sql = pd_resource_id_list[
                ['resource_id']
            ].apply(lambda res: """ ({},{})""".format(role_id, res['resource_id']),
                    axis=1).str.cat(sep=', ')

            # 定义完整sql语句
            create_map_role_resource_table_front_all_sql = create_map_role_resource_table_front_sql + create_map_role_resource_table_front_rear_sql
            # 执行sql语句
            db.update(create_map_role_resource_table_front_all_sql)
            # 返回响应
            return create_response(code=200, msg="权限修改成功。")



